#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int* plusOne(int* digits, int digitsSize, int* returnSize)
{
    int *nums = malloc(sizeof(int)* (digitsSize + 1));
    memset(nums,0,(digitsSize + 1)) ;
    int flag = 0;
    if(digits[0] == 9 && digitsSize == 1)
    {
        nums[0] = 1;
        nums[1] = 0;
        *returnSize = 2;
        return nums;
    }
    else if(digitsSize == 1)
    {
        nums[0] = digits[0] + 1;
        *returnSize = 1;
        return nums;
    }
    if(digits[digitsSize- 1 ] == 9)
    {
        flag = 1;
        nums[digitsSize] = 0;
    }
    else
    {
        nums[digitsSize] = digits[digitsSize-1] + 1;
    }
    for(int i = digitsSize - 2;i >= 0;i--)
    {
        if(flag == 1)
        {
            if((digits[i] + 1) % 10 == 0)
            {
                nums[i+1] = 0;
            }
            else
            {
                nums[i] = digits[i] + 1;
                flag = 0;
            }
        }
        else
        {
            nums[i+1] = digits[i];
        }
    }
    if(nums[0] == 0 && flag == 0)
    {
        for(int i = 0;i < digitsSize;i++)
        {
            nums[i] = nums[i+1];
        }
        *returnSize = digitsSize;
    }
    else if(flag == 1)
    {
        nums[0] = 1;
         *returnSize = digitsSize + 1;
    }
       
    return nums;
}

int main()
{
    int nums[2] = {1,0};
    int returnSize = 0;
    int * sc = plusOne(nums,sizeof(nums)/sizeof(nums[0]),&returnSize);
    for(int i = 0;i < returnSize;i++)
    {
        printf("sc[%d] = %d\n",i,sc[i]);
    }

    return 0;
}